home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-09-27 | 2.1 KB | 95 lines | [TEXT/CCL2] |
- ;;; flic-structs.scm -- structures to define FLIC intermediate language
- ;;;
- ;;; author : Sandra Loosemore
- ;;; date : 24 Mar 1992
-
-
-
- (define-struct flic-exp
- (type-template flic-td)
- (slots
- (unboxed? (type bool) (default '#f) (bit #t))
- (cheap? (type bool) (default '#f) (bit #t))))
-
-
- ;;; Use a macro to define each subtype and a BOA constructor.
- ;;; Maybe eventually the constructors will need to do additional
- ;;; initialization and have to be defined by hand.
-
- (define-local-syntax (define-flic name . slots)
- (let* ((maker (symbol-append 'make- name))
- (pred (symbol-append name '?))
- (args (map (function car) slots))
- (inits (map (lambda (x) (list x x)) args)))
- `(begin
- (define-struct ,name
- (include flic-exp)
- (predicate ,pred)
- (slots ,@slots))
- (define (,maker ,@args) (make ,name ,@inits))
- ',name)))
-
- (define-flic flic-lambda
- (vars (type (list var)))
- (body (type flic-exp)))
-
- (define-flic flic-let
- ;; value exp is stored in var-value slot
- (bindings (type (list var)))
- (body (type flic-exp))
- (recursive? (type bool) (bit #t)))
-
- (define-flic flic-app
- (fn (type flic-exp))
- (args (type (list flic-exp)))
- ;; true if number of args exactly matches arity of fn
- (saturated? (type bool) (bit #t)))
-
- (define-flic flic-ref
- (var (type var)))
-
- (define-flic flic-const
- (value (type t)))
-
- (define-flic flic-pack
- (con (type con)))
-
- (define-flic flic-case-block
- (block-name (type symbol))
- (exps (type (list flic-exp))))
-
- (define-flic flic-return-from
- (block-name (type symbol))
- (exp (type flic-exp)))
-
- (define-flic flic-and
- (exps (type (list flic-exp))))
-
- (define-flic flic-if
- (test-exp (type flic-exp))
- (then-exp (type flic-exp))
- (else-exp (type flic-exp)))
-
- (define-flic flic-sel
- (con (type con))
- (i (type int))
- (exp (type flic-exp)))
-
- (define-flic flic-is-constructor
- (con (type con))
- (exp (type flic-exp)))
-
- (define-flic flic-con-number
- (type (type algdata))
- (exp (type flic-exp)))
-
- (define-flic flic-void
- )
-
- (define-flic flic-update
- (con (type con))
- (slots (type (list (tuple int flic-exp))))
- (exp (type flic-exp)))
-
-
-